using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 5/30/2013 4:50:40 PM
    /// </summary>
    [Serializable]
    public class EstadoFaseLista : ReadOnlyListBase<EstadoFaseLista, EstadoFaseInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(EstadoFaseLista), "Role");
        }

        #endregion

        #region Factory Methods

        

        /// <summary>
        /// Obtiene un listado de EstadoFases de licenciamiento
        /// </summary>
        /// <returns></returns>
        public static EstadoFaseLista GetEstadoFase(string codigoFase)
        {
            return DataPortal.Fetch<EstadoFaseLista>(codigoFase);
        }

        private EstadoFaseLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
        
        private void DataPortal_Fetch(string criteria)
        {            
            RaiseListChangedEvents  = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_codigo", criteria)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_ESTADOS_FASE\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(EstadoFaseInfo.GetEstadoFaseInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 5/30/2013 4:50:40 PM
    /// </summary>
    [Serializable]
    public class EstadoFaseInfo : ReadOnlyBase<EstadoFaseInfo>
    {
        #region Business Methods
        public Guid    Id { get; internal set; }
        public string  Nombre { get; internal set; }
        public string Codigo { get; internal set; }
        #endregion

        #region Factory Methods

        internal static EstadoFaseInfo GetEstadoFaseInfo(DataRow childData)
        {
            return DataPortal.FetchChild<EstadoFaseInfo>(childData);
        }

        private EstadoFaseInfo()
        { /* require use of factory methods */ }
        
        /// <summary>
        /// EstadoFase licenciamiento
        /// </summary>
        /// <param name="fas_id"></param>
        /// <param name="fas_nombre"></param>
        /// <param name="fas_tipo"></param>
        /// <param name="fas_codigo"></param>
        /// <param name="fal_id"></param>
        
        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            Id = Guid.Parse(childData["est_id"].ToString());
            Nombre = childData["est_estado"].ToString();
            Codigo = childData["est_codigo"].ToString();
        }

        #endregion
    }
}

